using System;
using System.Collections.Generic;
using TestAssemblyInterfaces;

namespace TestAssembly
{
    [Log]
    public class TestClass : MarshalByRefObject, ITestClass
    {
        public void TestMethod()
        {
        }

        public void TestMethodWithParam(string str)
        {
        }

        public void TestMethodWithValueParam(int someInt)
        {
        }

        [NoLog]
        public void NotLoggedMethodWithParam(string str)
        {
        }

        public void TestMethodWithParams(params int[] ints)
        {
        }

        private void PrivateMethod(string str)
        {
        }

        [NoLog]
        public void PrivateMethodCaller(string str)
        {
            PrivateMethod(str);
        }

        public void MethodWithPrivateVars(string str)
        {
            var asd = new object();


            Console.WriteLine(str + asd.ToString());
            var type = asd.GetType();
            Console.WriteLine(type.ToString() + str);
        }

        private readonly List<DateTime> _dates = new List<DateTime>();
        public void SomeComplexCode(string str)
        {
            foreach (var smth in _dates)
                smth.AddDays(1);
        }

        public int TestWithReturnValue(string qq)
        {
            return int.Parse(qq);
        }

        public void Test(int zxc, string asd)
        {
            var lst = new object[] { zxc, asd };
            Logger.Entering("Test", lst);
        }

        public int TestProperty { get; set; }

        [Log(true)]
        public int TestPropertyWithParams { get; set; }

        [Log(true)]
        public void TestLoggingWithParameters(int zxc, string asd)
        {
        }

        [Log(true)]
        public void TestSubWithParams(int zxc, string asd)
        {
        }

        [Log(true)]
        public void TestSubWithoutParamsLogTrue()
        {
        }
    }
}